package com.zhouyiquan.qqclient.service;

import com.zhouyiquan.qqcommon.Message;
import com.zhouyiquan.qqcommon.MessageType;

import java.io.ObjectInputStream;
import java.net.Socket;

/**
 * @Author: 周益全 (https://gitee.com/zfovikqdev928)
 * @BugFeedBackEmail: zfovikqdev928@126.com
 * @Date: Create in 2023-01
 * @Description: in 2023 - 06 -
 * @Version:
 */
public class ClientConnectServerThread extends Thread {

    // 该线程需要持有一个 socket
    private Socket socket;

    public ClientConnectServerThread() {
    }


    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }


    // 为了后期需要使用该 socket，提供 getter 方法
    public Socket getSocket() {
        return socket;
    }


    @Override
    public void run() {
        // 线程需要在后台和服务器通信，因此使用 while 循环控制
        while (true) {
            try {
                System.out.println("客户端线程，持续等待读取从服务器端发送的消息");
                ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
                Message message = (Message) ois.readObject(); // 如果服务器没有收到 Message ，这里会造成阻塞

                // 返回 在线用户列表
                if (message.getMessageType().equals(MessageType.MESSAGE_RET_FRIEND)) {
                    String[] onlineUsers = message.getContent().split(" "); // 分割规则由服务器端定义，此处按照 空格 进行分割
                    System.out.println("\n========== 当前在线用户列表 ==============");
                    for (int i = 0; i < onlineUsers.length; i++) {
                        System.out.println("在线用户：" + onlineUsers[i]);
                    }
                    // 私聊
                } else if (message.getMessageType().equals(MessageType.MESSAGE_COMM_MES)) {
                    System.out.println("\n" + message.getSender() + "对" + message.getRecipient() + "说：" + message.getContent() + " 时间：" + message.getSendTime());
                } else if (message.getMessageType().equals(MessageType.MESSAGE_To_ALL_MES)) {
                    System.out.println("\n" + message.getSender() + "对大家说：" + message.getContent());
                } else {
                    System.out.println("其他类型 Message 暂不做处理");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
}
